#!/bin/bash

# SVN到Git迁移完成脚本
# 清理大文件并推送到Gitee仓库

# 检查参数
if [ $# -eq 0 ]; then
    echo "用法: $0 <Gitee仓库URL> [仓库目录]"
    echo "示例: $0 https://gitee.com/username/repo.git"
    echo "默认仓库目录: svn-temp-repo"
    exit 1
fi

GITEE_REPO_URL="$1"
REPO_DIR="${2:-svn-temp-repo}"

echo "=== SVN到Git迁移完成脚本 ==="
echo "Gitee仓库: $GITEE_REPO_URL"
echo "仓库目录: $REPO_DIR"

# 检查仓库目录是否存在
if [ ! -d "$REPO_DIR" ]; then
    echo "错误: 仓库目录 '$REPO_DIR' 不存在!"
    echo "请确保已经运行了 git svn clone 命令"
    exit 1
fi

# 进入仓库目录
cd "$REPO_DIR"

echo ""
echo "步骤1: 检查当前大文件..."
echo "当前大文件 (>50MB):"
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | grep "^blob" | sort -k2 -nr | head -10

echo ""
echo "步骤2: 创建备份分支..."
git branch backup-before-cleanup
echo "✓ 备份分支 'backup-before-cleanup' 已创建"

echo ""
echo "步骤3: 清理大文件..."
echo "正在从Git历史中移除大文件，这可能需要一些时间..."

# 使用git filter-branch清理大文件
# 为每个大文件执行删除命令
large_files=(
    "Doc/umsetup_x64.exe"
    "Doc/RazorEnhanced-0.8.2.126.zip"
    "Doc/Stealth/Stealth.exe"
    "Doc/python-3.12.3-amd64.exe"
    "Doc/Stealth10.1.1.zip"
    "Doc/Stealth9.20.rar"
)

for file in "${large_files[@]}"; do
    echo "正在移除文件: $file"
    git filter-branch --force --index-filter "git rm --cached --ignore-unmatch \"$file\"" --prune-empty --tag-name-filter cat -- --all
    if [ $? -ne 0 ]; then
        echo "警告: 移除文件 $file 时出现问题"
    fi
done

echo ""
echo "步骤4: 清理仓库..."
# 移除filter-branch创建的备份引用
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

# 清理reflog和垃圾回收
git reflog expire --expire=now --all
git gc --prune=now --aggressive

echo "✓ 仓库清理完成"

echo ""
echo "步骤5: 验证清理结果..."
echo "清理后的大文件 (>50MB):"
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | grep "^blob" | sort -k2 -nr | head -10

echo ""
echo "步骤6: 添加Gitee远程仓库..."
git remote add gitee "$GITEE_REPO_URL"
echo "✓ Gitee远程仓库已添加"

echo ""
echo "步骤7: 推送到Gitee..."
echo "正在推送所有分支到Gitee..."

# 推送所有分支
git push gitee --all

if [ $? -eq 0 ]; then
    echo "✓ 所有分支推送成功!"
else
    echo "✗ 推送失败，请检查错误信息"
    echo "如果需要恢复，可以使用: git reset --hard backup-before-cleanup"
    exit 1
fi

echo ""
echo "=== 迁移完成! ==="
echo "SVN仓库已成功迁移到Gitee"
echo "备份分支: backup-before-cleanup"
echo "如果需要恢复原始状态，请使用上述命令"

# 返回上级目录
cd ..
